2024 Emilia Romagna Grand Prix¶

Buongiorno gestori and welcome to the Fantasy League report for the 2024 Emilia Romagna Grand Prix, the return of the Emilia Romagna Grand Prix F1 after a rain-affected weekend last week forced the cancellation of the Grand Prix. Imola, as most people know it, is one of the classic circuits on the calendar, having a legacy that dates back long before some of the current crop of drivers were born. It was, of course, the site of the tragic death of Roland Ratzenberger and Ayrton Senna, and very nearly the death of Rubens Barrichello, who's Jordan was launched into the air at 225 km/h at Variante Bassa. The loss of two icons of the sport at the same weekend kick-started the FIA's push for safer cars. In fact, Barrichello, Senna, and Massa (all Brazilian) are the three major incidents that forced drastic changes to the safety structure of F1 cars, up until we get an incident like Grosjean's several years ago, where he walked away from a direct impact with a barrier and a car fire. This weekend, however, is particularly special, as it marks the $30^{th}$ anniversary of that fatal weekend. To commemorate the occasion, Sebastian Vettel drove Ayrton Senna's McLaren, in full Marlboro livery, with his company Race Without Trace, waving the Austrian and Brazilian flag as he drove around. It was quite special to watch, and some iconic photos are now emerging. Right, let's get into the report then.

Rumours continue to circulate that Adrian Newey is about to be announced at Ferrari for the 2026 season, after serving his 12 month gardening leave from Red Bull. We are still yet to hear anything from the British legend or the Italian outfit as to when the move could occur, but one thing that is very noticeable on that Ferrari is the massive HP branding. It's the first time, since I've been watching the sport (30 years), that Ferrari have had a sponsorship branding on their social media pages, website, and garage backdrop, where the sponsorship is either as big as the Ferrari badge, or is included in the team name. For instance, right now if you go to Ferrari's social channels it says "Scuderia Ferrari HP", it was never "Ferrari Shell" or "Ferrari Marlboro". That deal must be huge, and you're not telling me it's just to pay Lewis off. Something is cooking at Ferrari, and we all know it's Newey, so let's just get on with it Ferrari and make the announcement.

Other paddock/internet gossip is about the future of Williams man Logan Sargeant, the American driver is in his second season now and is not showing any significant signs of improvement. It is a tricky situation for Williams to be in, as they didn't really have anyone in their junior academy ready for promotion for this current season of F1. They've got some superstars coming through the ranks now but that is for next year or 2026 perhaps. Similarly, they don't want to show their junior academy that it's "1 year or your out", because they want those young drivers to stick with them in the hope that it will result in an F1 seat. Williams signed Albon until the end of 2026 this week, so there is not the question of the other seat. There's a clip going round at the moment of an F2 commentator on a non-English broadcast who starts talking about Kimi Antonelli and how he is going to be at Williams next year, before he quickly stops himself in realising that he shouldn't be talking about that. Believe what you want to believe, but I don't think Antonelli ends up at Williams next year over a Williams junior driver, especially when Vowles is trying to move Williams away from being a second-Mercedes team, and making a good job of it too.

Finally, Lance Stroll did an interview this week, although it was quite hard to find. Thanks to our friends at Rocketpoweredmohawk (RPM), Rawe Ceek can bring you a summary of this interview. Essentially it is Lance being interviewed for a good hour or so, where he starts talking about the super license and how good it is for the sport. In this statement he says that the super license essentially stops rich people paying their way through the lower category. I won't go on a Lance Stroll bashing frenzy, because RPM has already dealt with that quite nicely, and if you haven't seen that already I suggest you do, but this is truly ridiculous of Lance. He needs to take a good long look in the mirror given his last few races and figure out what he wants to do, because there is no progression in his ability whatsoever. Aston are yet to confirm that Stroll will be racing for them in 2025, but his rolling contract system with the Stroll-owned British team would suggest that he won't be going anywhere any time soon.

In [ ]:
import os
import subprocess
import src.dataIO as io
import src.webDataIO as wio

from pathlib import Path

year = 2024
race = 'Emilia Romagna'

Grand Prix Report¶

The talk of the weekend was whether Lando Norris could get back on the top step and become one of a short list, if not the first, driver to win back-to-back on their debut win in a very long time / ever, delete as appropriate. That record is actually super difficult to find any information on, so forgive me. We are in a rush this week with back-to-back Grand Prix weekends. The race organisers decided to solve track limits with gravel this week, which caught a lot of the drivers out. Alex Albon and Fernando Alonso were two drivers who dropped it during practice and saw themselves in a wall. Imola is an interesting track layout, and by adding this extra hint of danger if the drivers run wide, we expected their to be a bit of drama during the bigger sessions.

Sprint Qualifying¶

No Sprint Qualifying To Report.

In [ ]:
#wio.outputs_sq_data(
#    year=year,
#    race=race)

Sprint Race¶

No Sprint Race To Report.

In [ ]:
#wio.outputs_sprint_data(
#    year=year,
#    race=race)

Qualifying Report¶

We were promised some rain this weekend that never really materialised, but Qualifying did throw up a couple of surprises. Let's start with the one that isn't really a surprise, Logan Sargeant. Logan is not-classified in qualifying and it is becoming quite a regular thing that he is out in Q1. Logan has been openly talked about by his boss as being under-the-cosh and replaceable this week, which is a first for the usually supportive James Vowles. All this seemingly did was apply pressure to the American driver who completed a few, albeit illegal, laps during qualifying which saw him finish last. The biggest surprise of the session was the early exit of Fernando Alonso, the double world champion had a major excursion into the barrier during free practice which gave his Aston Martin team a bit of a headache going into the competitive side of the weekend. It's not obvious, and it hasn't been confirmed as far as I can tell, but it is thought that the recently upgraded Aston was sent out in qualifying without the full upgrade package as there weren't enough parts to rebuild the necessary area. It's becoming more and more common that Aston Martin will bring upgrades that they don't fully understand and perhaps don't always bring performance gains, but they eventually get it right. It seems that Fernando, who we know can drive around a bad car and outperform even the worst, takes a couple of races to get back into the swing of things once an upgrade is added. After a mega weekend of penalties last race, Kevin Magnussen seemed on his best behaviour this week, though his performance was quite anonymous. Kevin dropped out of qualifying in the first session, trailing his teammate throughout the whole session. Unfortunately Magnussen was blocked on his final run by Oscar Piastri, who later received a grid penalty. These three were joined by the Kick Sauber pairing in Q1, with the slight advantage going to Bottas in the end. The lean green machine has only looked competitive at a handful of races this year, but there is definitely progress being made down at Sauber and it's looking more like a rebuild phase at the moment.

Q2 saw the usual characters of Pierre Gasly, Esteban Ocon, Alex Albon, and Lance Stroll joined by a shock elimination of Sergio Perez. The Red Bull didn't look good throughout all of the practice sessions and even in most of qualifying it never really looked hooked up. When the car is behaving like that you really begin to see the difference in class between the drivers, and unfortunately Perez isn't it. Sergio had a mistake in free practice 3 and made another error at the hairpin during qualifying that saw him eliminated by both RB cars and Nico Hulkenberg, so the opportunity was definitely there for him to progress. There are, of course, always going to be rumours that this means Perez will be replaced soon, and honestly I don't doubt that he won't be a Red Bull driver in 2025, but it's a bit early to start piling on the pressure. The Alpines getting eliminated in Q2 sounds bad, but if you look at their performance at the start of the season, this does show some signs of progress. They are quietly working away down there and building up to be back with the midfield team. I would say it's hard to pick between them, RB, and Aston Martin at the moment, and that's not necessarily a bad thing at all. Points are the divider at the end of the day but with 4 or 5 teams consistently scoring points, you need to be there for the races where one of the big 4/5 drops the ball, and Alpine are doing exactly that.

Well, after much complaining from Max about the state of his Red Bull, you could be forgiven for assuming he didn't make it onto the front row, but at the last minute he pulled it out of the bag to secure pole position ahead of Oscar Piastri (pre-penalty) by 0.074 seconds. The Dutchman really had to hook it up there as both McLaren drivers were within 0.1 seconds of him. The vultures are certainly circling now and it looks like Red Bull are touchable again. The McLaren boys were closely followed by Charles Leclerc who beat his teammate by 0.3 seconds in fifth. A strong performance from RB saw them competing with the Mercs for the lower end of the top 10, and Nico Hulkenberg again just quietly getting on with the job at hand to make yet another Q3 appearance. Sure, he didn't set the world on fire, but he's there on merit in a Haas. There was quite a nice little moment where Nico gave Max a tow down the pit straight in Q3 because Max towed him in Q2, which is nice considering they haven't ever really worked together before, and both of their teammates were having a bad session.

In [ ]:
wio.outputs_qualifying_data(
    year=year,
    race=race)
Pos No Driver Car Q1 Q2 Q3 Laps
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 1:15.762 1:15.176 1:14.746 18
2 81 Oscar Piastri PIA McLaren Mercedes 1:15.940 1:15.407 1:14.820 15
3 4 Lando Norris NOR McLaren Mercedes 1:15.915 1:15.371 1:14.837 19
4 16 Charles Leclerc LEC Ferrari 1:15.823 1:15.328 1:14.970 21
5 55 Carlos Sainz SAI Ferrari 1:16.015 1:15.512 1:15.233 20
6 63 George Russell RUS Mercedes 1:16.107 1:15.671 1:15.234 18
7 22 Yuki Tsunoda TSU RB Honda RBPT 1:15.894 1:15.358 1:15.465 15
8 44 Lewis Hamilton HAM Mercedes 1:16.604 1:15.677 1:15.504 20
9 3 Daniel Ricciardo RIC RB Honda RBPT 1:16.060 1:15.691 1:15.674 15
10 27 Nico Hulkenberg HUL Haas Ferrari 1:15.841 1:15.569 1:15.980 21
11 11 Sergio Perez PER Red Bull Racing Honda RBPT 1:16.404 1:15.706 10
12 31 Esteban Ocon OCO Alpine Renault 1:16.361 1:15.906 15
13 18 Lance Stroll STR Aston Martin Aramco Mercedes 1:16.458 1:15.992 15
14 23 Alexander Albon ALB Williams Mercedes 1:16.524 1:16.200 12
15 10 Pierre Gasly GAS Alpine Renault 1:16.015 1:16.381 14
16 77 Valtteri Bottas BOT Kick Sauber Ferrari 1:16.626 6
17 24 Zhou Guanyu ZHO Kick Sauber Ferrari 1:16.834 9
18 20 Kevin Magnussen MAG Haas Ferrari 1:16.854 8
19 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 1:16.917 7
NC 2 Logan Sargeant SAR Williams Mercedes DNF 8

Race Report¶

Right, I made no promises this week about being nice to Lando, so let's have it. Lando Norris is perhaps the best worst driver I have ever watched race in formula 1. He started second on the grid after his teammate got a 3-place penalty, didn't get away super well, but didn't drop any places either, and basically maintained second place for most of the race. McLaren did a decent enough strategy, and he was able to keep ahead of a chasing Leclerc, who has also shown some of these traits in the past, right up until the dying moments of the Grand Prix. In those last moments, McLaren's tyre strategy for Norris paid off and he suddenly became the fastest man on track (except for Alonso who had pitted for some fresh rubber). Norris dropped Leclerc and began to pull in Verstappen ahead who was struggling with some balance and tyre issues. Despite putting in a great performance (hence the "best" in my earlier sentiment) to catch the Dutchman, Norris lost his cool and started throwing the car over kerbs, into gravel, spinning up the back tyres, getting ragged with it, and a host of other minor errors (hence the "worst" in my earlier sentiment). This ultimately meant that, although he was able to finish within 1 second of Max, he wasn't able to pass. Once again Norris showed that, when push comes to shove and he has to make the decisive moves, he can't. Now this is not to say that he isn't able to win a race, obviously he is, and we've seen similar with Leclerc - hell, I've even said the same about Leclerc so this isn't even some sort of Ferrari bias, it's just that he hasn't got that killer instinct that all successful drivers have to keep a cool head and execute the move they need to to win. Miami was perhaps a one-off in that respect because he didn't actually have to overtake Max, he just had to put in a couple of good laps, and that's relatively easy to do when you're out front. Only time will tell, but he's certainly heading the way of Leclerc, who hasn't won a race in a very long time. From that, I'm pretty sure you can guess that Max Verstappen did indeed win the race, but the reigning champion didn't have it all under control from the outset as we are used to. All weekend long the Red Bull has looked more of a handful than it has for the last four years, and it seemed as though we might have seen a different winner again. Max, however, put in a champions drive to bring that thing home in first place ahead of Lando Norris and Charles Leclerc, who takes Ferrari's first podium at Imola since 2006. Now, in Ferrari's defense, Imola was off the calendar for a long time, but it's still fairly impressive. McLaren out-classed Ferrari strategy wise to get Oscar Piastri into fourth ahead of Sainz in fifth.

Mercedes had a fairly lonely race this weekend, with Aston Martin and Alpine not up to their usual standard (yes they are their nearest competitors at the minute, not a dig, just facts), the British pairing of Hamilton and Russell pretty much had each other to contend with. Lewis finished 13 seconds behind Sainz, with Russell a further 12 seconds behind him and a chasing Perez a further 7 seconds back. So it wasn't all plain sailing. What I did think was interesting is that Mercedes essentially gave Lewis more points than he had earned by pitting George towards the end of the race. There was a concern that perhaps the tyres wouldn't make it to the end at the pace they were going for, specifically on George's car though, despite both drivers pitting close together. George, rightfully, made a complaint that if they didn't box Lewis at the same time then they were essentially promoting him to a higher position and sacrificing George, and he has a point because Lewis was 25 seconds ahead of Perez and could have backed off to preserve the tyres. So why did Mercedes do this? Well they wanted the fastest lap, and they got it, but it doesn't make much sense to only pit one car. George essentially scored the same amount of points and the team gained one point, but it could have gone wrong in the pits and Mercedes should know that, they are one of the most successful teams of the past decade. Sergio Perez made a decent recovery drive to come back to eighth place, though he did have a couple of wild moments and excursions throughout the Grand Prix, again I'm not starting the Perez witch hunt just yet, but it is coming.

The rest of the race was actually pretty boring. Imola is not much of a track for overtaking and the field spread out quite quickly. The main noticeable moment was Alex Albon being released unsafely from the pits, apparently, though I haven't seen the images of the wheel hanging off. Ted reported that the wheel rim was damaged, so perhaps they fitted it tightly but incorrectly so that the wheel was wobbling up and down on the axel, rather than the loose wheel issues that we usually see with unsafe pit releases. Alex served some penalties and later retired from the race, meaning Fernando Alonso basically finished last, with the Spaniard completing some extended testing for the new Aston Martin upgrades. Expect Alonso to be fast in Canada when he fully understands those upgrades.

In [ ]:
wio.outputs_race_result(
    year=year,
    race=race)
Pos No Driver Car Laps Time/Retired PTS
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 63 1:25:25.252 25
2 4 Lando Norris NOR McLaren Mercedes 63 +0.725s 18
3 16 Charles Leclerc LEC Ferrari 63 +7.916s 15
4 81 Oscar Piastri PIA McLaren Mercedes 63 +14.132s 12
5 55 Carlos Sainz SAI Ferrari 63 +22.325s 10
6 44 Lewis Hamilton HAM Mercedes 63 +35.104s 8
7 63 George Russell RUS Mercedes 63 +47.154s 7
8 11 Sergio Perez PER Red Bull Racing Honda RBPT 63 +54.776s 4
9 18 Lance Stroll STR Aston Martin Aramco Mercedes 63 +79.556s 2
10 22 Yuki Tsunoda TSU RB Honda RBPT 62 +1 lap 1
11 27 Nico Hulkenberg HUL Haas Ferrari 62 +1 lap 0
12 20 Kevin Magnussen MAG Haas Ferrari 62 +1 lap 0
13 3 Daniel Ricciardo RIC RB Honda RBPT 62 +1 lap 0
14 31 Esteban Ocon OCO Alpine Renault 62 +1 lap 0
15 24 Zhou Guanyu ZHO Kick Sauber Ferrari 62 +1 lap 0
16 10 Pierre Gasly GAS Alpine Renault 62 +1 lap 0
17 2 Logan Sargeant SAR Williams Mercedes 62 +1 lap 0
18 77 Valtteri Bottas BOT Kick Sauber Ferrari 62 +1 lap 0
19 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 62 +1 lap 0
NC 23 Alexander Albon ALB Williams Mercedes 51 DNF 0

Fastest Lap¶

Fastest lap this week goes to George Russell, the Mercedes man pitting in the dying stages of the Grand Prix for some fresher rubber and completing a lap time of 1:18:589 with an average speed of 224.871 km/h. He beat out Fernando Alonso who attempted another fastest lap run towards the very end of the Grand Prix, but sadly the Aston Martin was just not on form this weekend.

In [ ]:
wio.outputs_fastest_lap(
    year=year,
    race=race)
Pos No Driver Car Lap Time of day Time Avg Speed
1 63 George Russell RUS Mercedes 54 16:17:28 1:18.589 224.871
2 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 62 16:29:56 1:19.004 223.689
3 11 Sergio Perez PER Red Bull Racing Honda RBPT 52 16:14:50 1:19.686 221.775
4 81 Oscar Piastri PIA McLaren Mercedes 25 15:37:45 1:19.907 221.162
5 16 Charles Leclerc LEC Ferrari 27 15:40:25 1:19.935 221.084
6 4 Lando Norris NOR McLaren Mercedes 54 16:16:38 1:19.994 220.921
7 55 Carlos Sainz SAI Ferrari 63 16:29:04 1:20.220 220.299
8 44 Lewis Hamilton HAM Mercedes 43 16:02:17 1:20.331 219.994
9 1 Max Verstappen VER Red Bull Racing Honda RBPT 38 15:55:03 1:20.366 219.898
10 18 Lance Stroll STR Aston Martin Aramco Mercedes 58 16:23:11 1:20.570 219.342
11 22 Yuki Tsunoda TSU RB Honda RBPT 14 15:22:58 1:20.936 218.350
12 20 Kevin Magnussen MAG Haas Ferrari 58 16:23:41 1:21.009 218.153
13 24 Zhou Guanyu ZHO Kick Sauber Ferrari 37 15:55:04 1:21.016 218.134
14 2 Logan Sargeant SAR Williams Mercedes 55 16:19:52 1:21.229 217.562
15 23 Alexander Albon ALB Williams Mercedes 48 16:12:08 1:21.274 217.442
16 31 Esteban Ocon OCO Alpine Renault 37 15:54:52 1:21.304 217.361
17 10 Pierre Gasly GAS Alpine Renault 10 15:17:37 1:21.371 217.183
18 77 Valtteri Bottas BOT Kick Sauber Ferrari 11 15:19:01 1:21.455 216.959
19 3 Daniel Ricciardo RIC RB Honda RBPT 13 15:21:40 1:21.569 216.655
20 27 Nico Hulkenberg HUL Haas Ferrari 3 15:07:28 1:21.700 216.308

Fantasy League Scores¶

Lineup Scores¶

Ok I think I have waffled enough, let's see what this race has done to the fantasy league standings. First let's begin with the driver/team points for the grid. The data you see below are the current total points and values for each driver and team. Values are taken going into the race and updated for next race after I submit the report.

In [ ]:
weekly_scores = {
    "Name": ["Points", "Value"],
    "Race": [f'{race}'],
    "Ocon": [44, 9.4],
    "Gasly": [25, 8.3],
    "Stroll": [22, 12.8],
    "Alonso": [72, 16.6],
    "Leclerc": [219, 22.3],
    "Sainz": [183, 20.7],
    "Bearman": ["N/A", "N/A"],
    "Magnussen": [62, 9.1],
    "Hulkenberg": [47, 8.0],
    "Bottas": [3, 6.7],
    "Guanyu": [34, 7.6],
    "Norris": [164, 24.4],
    "Piastri": [122, 20.3],
    "Hamilton": [70, 19.1],
    "Russell": [105, 19.2],
    "Tsunoda": [40, 9.4],
    "Ricciardo": [-1, 9.3],
    "Verstappen": [251, 30.2],
    "Perez": [198, 23.4],
    "Albon": [-9, 8.0],
    "Sargeant": [18, 6.1],
    "Alpine": [78, 8.9],
    "Aston Martin": [133, 14.6],
    "Ferrari": [486, 21.8],
    "Haas": [134, 8.7],
    "Kick Sauber": [40, 6.4],
    "McLaren": [332, 24.2],
    "Mercedes": [245, 20.3],
    "RB": [73, 8.9],
    "Red Bull": [591, 28.7],
    "Williams": [16, 6.2]}
root = Path().absolute()
if Path(f'{root}/Data/{year}/Lineup/{race}_Results.json').is_file():
    pass
else:
    io.save_json_dicts(
        out_path=Path(f'{root}/Data/{year}/Lineup_Weekly.json'),
        dictionary=weekly_scores)
subprocess.run(["python", "lineup.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'lineup.py', '2024'], returncode=0)

For the first time all season, I think, Lando Norris is our weekly winner this week with a score of 37 points. The British driver technically made an on-track overtake and was awarded driver of the day to gain an extra 10 points to edge out Max Verstappen and take the top step. The Dutchman is next with a score of 35 points. These two, potential title contenders, are far ahead of Piastri and Leclerc in third with a score of 24, Russell in fourth with 23, and Sainz in fifth with 17 points. Unsurprisingly Alex Albon finishes last this week with -20 points caused by his retirement from the race. We then have a three-way tie for second last between Bottas, Ricciardo, and Sargeant who all come home with -2 points from the weekend. In third we have the Alpine pairing picking up 1 point, just behind Alonso in fourth with 3, and somehow Nico Hulkenberg only scrapes 3 points. That last one particular seems outrageous given the hard work he is putting in to his performances, but since they removed the qualifying points for getting through to the further sessions, Nico has to turn it round in the races to actually get any points - sadly Perez is to blame for this.

The orange wave continues in the constructors weekly score, with McLaren beating Red Bull to the top step with 64 and 61 points, respectively. Somehow Mercedes are in third place with 54 ahead of Ferrari, this is probably due to some positions lost for Sainz and positions gained for Lewis. When it rains it pours for Williams, the Grove outfit are the only team coming away with negative points this week with -21. Kick Sauber scrape 2, and Alpine only get 5 this week.

Max continues to sit at the top of the championship, though technically that gap has now come down slightly to Lando, not the immediate chasing pack. Max is at the top with 251 points ahead of Ferrari's Charles Leclerc with 219. In third place is Sergio Perez with 198, and Carlos Sainz in fourth with 183 points. Lando is still in fifth place with 164 points but is gaining on the pack ahead. If you look at the graph for Driver Sum Points you can see just how quickly Lando is catching the Ferrari drivers and Perez ahead, he's just now starting to reel Max in too. Alex Albon is really have a poor time, the Thai/Brit driver plummets to the bottom of the table this week with a total of -9 points, he's followed by Daniel Ricciardo on -1 as the Aussie has a fairly forgettable race this weekend. Arguably climbing the table is Valtteri Bottas with 3 points, behind Logan Sargeant with 18. The American rookie is absolutely smashing it this year! Rounding out the bottom five is social media sensation Lance Stroll with 22 points.

Red Bull are still at the top of the standings with 591 points, but what is particularly interesting is the shape of their points curve in the Team Sum Points graph. You can see that the Milton Keynes team started really strongly with a nice straight line trending upwards, but stalled a little in Australia when Max had his DNF. They then quickly climb again, but if you look really hard you can see that they are slowly tapering off now as McLaren and Ferrari continue their steady climb in second and third with 486 and 332 points, respectively. Williams, Kick Sauber, and RB are the bottom three teams with 16, 40, and 73 points, respectively.

In [ ]:
points_files = [
    'Driver_Points_Bar.png',
    'Team_Points_Bar.png',
    'Driver_Sum Points.png',
    'Team_Sum Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Just like the real world economy, prices continue to sky rocket this week. Max Verstappen is nearly back to his absolute maximum with a price of $30.2, Norris shoots up to $24.4, Perez up to $23.4, and Leclerc up to $22.3 million. I don't know how much longer this can continue. Sargeant is your cheapest driver, which bodes well for his points per value, at $6.1, Bottas at $6.7, Guanyu Zhou at $7.6 to round out the bottom three. They're followed by Albon and Hulkenberg at a solid $8.0 and Pierre Gasly at $8.3 million.

Red Bull are the team at the top of the expensive list with a value of $28.7, continuing to screw up the driver and constructor market. Despite their position of third in the points table, McLaren are ahead of Ferrari in second place, with the former sitting at $24.2 and the Italians sitting at $21.8. Williams drop to the bottom of the list with $6.2, Kick Sauber with $6.4, and Haas at $8.7. Where all values are in millions.

In [ ]:
average_files = [
    'Driver_Values_Bar.png',
    'Team_Values_Bar.png',
    'Driver_Average Points.png',
    'Team_Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in average_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Lando Norris is finally starting to prove his worth as he tops the points per value list this week with 1.52 ppm, ahead of Kevin Magnussen with 1.43 ppm and George Russel with 1.2 ppm. The Mercedes man is closely followed by Oscar Piastri and Max Verstappen with 1.18 and 1.16 ppm, respectively. Alex Albon represents your worst selection this week with a points per value of -2.5 ppm, and Logan Sargeant is in second with -0.33 ppm. In third place it's Valtteri Bottas with -0.3 ppm and he's followed by Ricciardo with -0.22 ppm. In fifth place is Esteban Ocon who manages a 0.11 ppm.

Mercedes represent your best team selection this week with 2.66 ppm, just beating McLaren who have 2.64 ppm. In third place we have Haas, who are really turning their fortunes around, bringing in 2.41 ppm. Williams, unsurprisingly, are at the bottom of the list this week with -3.39 ppm, followed by Kick Sauber with 0.31 ppm and Alpine with 0.56 ppm.

ppm = points per million dollars.

In [ ]:
ppv_files = [
    'Driver_Points Per Value_Bar.png',
    'Team_Points Per Value_Bar.png',
    'Driver_Average Points Per Value.png',
    'Team_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in ppv_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]
In [ ]:
subprocess.run(["python", "manager.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'manager.py', '2024'], returncode=0)

Manager Scores¶

It's time to see what the scores are looking like in the fantasy league between all of you. We have a brand new weekly winner this week! Rookie manager Chloe takes the top step of the podium with Ms Fritters Driving Skool, scoring 273 points thanks to a tactical limitless token. In second place we have Jo and Paradise Lost with 217, closely followed by Matty and The Lizard Queen with 209 points. Have the tides of Stefanus domination finally turned? The rookie manager only managers fourth and fifth this week with Gelael and Haryanto with 200 and 190 points, to round out the top five.

Stuart and Ferrari Strategists take the Golf League honours this weekend with a whopping -13 points. That's exactly what Stuart needed to turn their fortunes round in their Golf League campaign, and at the right time too! In second it's a return to form for Bwoah Industries, with manager James bringing home 1 point for Rolex Sipsmith Golf in second place. Patrick and Racing No Points are next up in third place with 8 points and the last of the single figures for the Golf League this week, as Will and The Big One are in fourth with 15. Charlie and Lee Carvallo's F1 Challen round out the bottom five with 26 points.

Well it might have been a poor weekly score for Stefanus, but all three of the rookie manager's teams are still out front, led by Haryanto, Syahrul, and Gelael with 1780, 1704, and 1639 points, respectively. Patrick is still in the mix in fourth with Johnny UniHaas and 1579 points, and Toby rounds out the top five with Hesketh 2.1 with 1571 points. This means we have no position changes in the top five. In fact, we don't have any in the top 7, and only Jake and Sam CJ moving around in the top 10.

At the slow end, it's still Patrick and Racing No Points in the lead with 249 points, ahead of Will and The Big One in second with 314 points. A strong weekly score from Stuart and Ferrari Strategists sees them move down the order to third with 317 points, chased by James and Bwoah Rolex Sipsmith Golf who also drop a position down to fourth with 327. Charlie and Lee Carvallo's F1 Challen maintain fifth in the Golf League with 360 points.

Our biggest winner this week goes to Jo and Paradise Lost who gain 11 positions in the championship standings, a special mention also to Chloe and Ms Fritters Driving Skool, and Matty and The Lizard Queen, who gain 10 and 6 places, respectively. Our biggest loser this week is Cameron and Stuart's Snipped Balls who drop a shocking 9 places in the standings. It's a poor week for Cam to be honest, as Matty's Snipped Balls also drop 5 places, along with Val and Phil with My fav'rit colour is blue dropping 5 places, and BMW Motorrad dropping 4 places with Pierce and Cam and their teams Grazzi#44 and Josh's Hairy Balls also dropping 4 places. That takes Cam's total positions lost to -18, making him our biggest loser of the week.

In [ ]:
team_files = [
    'LeagueTeams_Points_Bar.png',
    'LeagueTeams_Sum Points_Bar.png',
    'LeagueTeams_Sum Points.png',
    'LeagueTeams_PositionsGained_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

With the driver and constructor market inflation continuing for another week, the team values are starting to get a little out of hand. James and Bwoah OnlyFans VIP Racing lead the way with a value of $114.7, followed by Stefanus and Haryanto with $113.2, and Phil with BMW Motorrad and a value of $112.9 million. The cheapest team on the grid is managed by Will, that's right it's Will's Big One with a value of $49.2, followed by Stuart and Ferrari Strategists coming in at $52.0, and Patrick with Racing No Points leading the championship, but with a value of $53.4 million. The sum values graph is currently not reading correctly, my apologies, when they changed the perk system for "No Negative" this year, it really messed with everything, and the races are coming fast so my time to find and fix this issue is limited. I know what the problem is, I just need to find the line in the code, I'll fix it and it'll make more sense. Essentially, something is showing as a weekly value of $268 million and it's throwing it off a little.

Unsurprisingly, Chloe and Ms Fritters Driving Skool take the top points per value this week, with a score of 273 points, and a capped value of $100 million for a Limitless token, meaning a ppv of 2.73 ppm. I think it's worth noting that without using a limitless Jo and Paradise Lost managed a 2.02 ppm and Matty and The Lizard Queen managed a 1.94 ppm.

In [ ]:
team_files = [
    'LeagueTeams_Values_Bar.png',
    'LeagueTeams_Sum Values.png',
    'LeagueTeams_Points Per Value_Bar.png',
    'LeagueTeams_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Stefanus is currently leading the way for total points as a manager, not a surprise given the rookie sensation is currently in the top three spots of the championship standings. Close behind is Josh, the pair are on 5123 and 4331 points, respectively. They're followed by Sebastian who has 4067 points. Our lowest three-team manager is Andrew with a whopping 2136 points across all there teams. Naturally that means that Stefanus is also leading the average points total too, heading for manager of the year? Only time will tell. As for this weekend, it's Chloe who takes the highest manager average points, with their sole entry scoring 273 points. Stefanus was some way behind in second with an average weekly score of 182.33 points, followed by Sebastian in third with 177 points. Our, statistically, worst manager of the week was Patrick with 80.5 points across their teams, just behind Stuart with 91.33 points and Joe with 94.33 points.

In [ ]:
manager_files = [
    'LeagueManagers_Sum Points_Bar.png',
    'LeagueManagers_Sum Points.png',
    'LeagueManagers_Average Points_Bar.png',
    'LeagueManagers_Sum Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Stefanus is taking all the headlines at the minute, also topping out the average manager values list with a total of $111.13 million, closely followed by Toby with $110.6 and Sam CJ with $108.9 million. Our least valuable manager is Patrick with a grand total of $80.95 million, just behind Joe and Andrew with $86.3 and $86.63 million across their teams.

Manager of the week, however, goes to Chloe who takes a points per value of 2.73 ppm with their only team topping out the leaderboard. It's pretty tight behind but Sebastian just about takes second place with a score of 1.65 ppm ahead of Stefanus in third with 1.64 ppm. Pete is in fourth with a 1.59 ppm and Jake rounds out the top five with 1.56 ppm. Patrick is our only manager not breaking even on the points per million mark with a 0.99 ppm score this week, just behind Pierce with 1.02 ppm and Stuart, Charlie, and Cameron with 1.05 ppm. They're behind Adam and Joe with 1.07 and 1.09 ppm this week.

In [ ]:
manager_files = [
    'LeagueManagers_Sum Values.png',
    'LeagueManagers_Average Values_Bar.png',
    'LeagueManagers_Points Per Value_Bar.png',
    'LeagueManagers_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

There is certainly a change brewing in the driver selection process this week, with a few of you opting to drop Max Verstappen from your teams. The triple world champion only making 30 of 65 selections, down from 33 last time out. It's tight then between Yuki Tsunoda and Alex Albon, who sit in second place on 27 selections each, that's still a down turn for Albon, but a rise for Tsunoda after some recent consistency. Hulkenberg is next up, far ahead of his Haas teammate with 24 selections, despite not having as many points as the Dane. Valtteri Bottas, despite being on only 3 points total, makes 23 of the 65 selections ahead of Lando Norris and Charles Leclerc in fifth with 21 selections.

Your least chosen driver is Oliver Bearman, who despite only racing in one race this season and still being an F2 driver is making 2 appearances down the grid. I suspect this is some Golf League shenanigans, but fair play to you if you want to game the system this way. Lance Stroll is the least selected full-time driver, the Aston Martin driver only making the cut 5 times across the field. Shockingly enough, the Mercedes duo are next in third with 7 selections each. Then come the least selected McLaren and Red Bull drivers of Oscar Piastri and Sergio Perez with 10 and 11 selections, respectively. So many of you are opting for their higher performing teammates.

Ferrari are still the most selected team this week with one more selection that last time out, Forza Italia indeed, the Italian Stallions are in 30 of the 65 teams through the field. They are followed by Haas F1 with 20 selections, that's down from last week - were Magnussen's actions too much for you all? Then it's a tie between Red Bull and RB with 15 of 65 selections each, that's a drop for Red Bull of 5 teams, but a rise in power of RB. Are some of you playing the ppv game? Alpine are the least selected team with only 6 selections, behind Mercedes with 7, the British outfit dropping down the order with the mediocre performances of late. Aston Martin and Williams round out the bottom three this week with 8 selections each.

As if to add more confusion to the situation, Max Verstappen holds on to his role as the most selected DRS Boosted driver with 25, that means that 5 of you have Max and haven't boosted him, that's up from 3 last week. It's crazy. Charles Leclerc and Norris are tied here too, with 11 DRS Boosts each. Logan Sargeant is in third with 5 DRS Boosts. We only had one Extra DRS this week, and it went to Charles Leclerc, the Ferrari man making the cut against Norris and Verstappen there. That Extra DRS token was joined by a single limitless token and two wildcard tokens used this week. A bit of a lull on the token usage? Are people saving up for some sprint races perhaps?

In [ ]:
count_files = [
    'LeagueCounts_Driver_Bar.png',
    'LeagueCounts_Constructor_Bar.png',
    'LeagueCounts_DRS Boost_Bar.png',
    'LeagueCounts_Extra DRS_Bar.png',
    'LeagueCounts_Perks_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None, None]
In [ ]:
count_files = [
    'LeagueSumCounts_Driver.png',
    'LeagueSumCounts_Constructor.png',
    'LeagueSumCounts_DRS Boost.png',
    'LeagueSumCounts_Extra DRS.png',
    'LeagueSumCounts_Perks.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None, None]

For more figures, please see the Facebook group album.

In [ ]:
subprocess.run(["python", "league_prizes.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'league_prizes.py', '2024'], returncode=0)

Prizes¶

The Emilia Romagna (Imola) Grand Prix was of course a spot prize week! Yep that's right, our second spot prize of the year. This one, however was aimed at the lowest score possible! Yes you were warned. The prize is dedicated to the iconic 2021 Emilia Romagna Grand Prix that saw Max Verstappen and Lewis Hamilton have their first real coming together down into turn 1. Hamilton had a nightmare of a race and was, at one point, in the barrier down at the hairpin. He managed to reverse back out of the wet gravel but was nearly a lap down. If not for a mid race safety car, and a mega Mercedes car, Max could have pulled out a massive lead in the championship. Anyway, enough history. Stuart and Ferrari Strategists take this week's prize with a score of -13. So congratulations Stuart.

This weekend, yes we have back-to-back Grand Prix, is Monaco. The Jewel of the Crown, as they call it, is also the name of our spot prize. Don't worry though, it's back to a normal Spot Prize where you are trying to get the maximum score. You may have noticed that all the Spot Prizes aimed to get the maximum score are all street tracks, yes it was intentional. Good luck to you all on that one.

In [ ]:
directory_path = Path(f'{root}/Data/{year}/Figures/Prizes')
file_paths = [
    Path(f'{directory_path}/{file}') for file in
    os.listdir(directory_path) if f'{race}' in file]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
Out[ ]:
[None]

F1 Play¶

In the F1 play league this week, it's a stonking win for Josh who scores 3/10. Not a particularly great score, but the highest score in the league. Matty and Stuart both come home with a pair of zeros.

That takes the scores to:

Stuart - 16

Josh - 22

Matty - 10

In [ ]:
F1_play = {
    "Stuart S": [3, 5, 2, 4, 0, 2, 0],
    "Matty J": [2, 2, 0, 0, 3, 3, 0],
    "Josh M": [2, 3, 2, 6, 3, 3, 3]}
io.save_json_dicts(
    out_path=Path(f'{root}/Data/{year}/F1_Play.json'),
    dictionary=F1_play)
subprocess.run(["python", "F1_play.py", f'{year}'])
points_files = [
    'Points.png',
    'Sum Points.png',
    'Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/F1_Play')
file_paths = [Path(f'{directory_path}/{race}_F1Play_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None]

Next Up¶

Next up, magical Monaco. The F1 circus descends on the streets of the principality in a weekend full of sport. The Monaco Grand Prix, the Indy 500, the Nascar 600, the Chinese Formula E Grand Prix, and the Moto GP Spanish Grand Prix. That's right, there's plenty of sport to watch, and hopefully you can join me in the group chat for some Monaco banter. Don't forget the spot prize!